跳到主要内容

25 项目开发的前期设计

项目中需要思考的问题:开发流程的定义;平台与框架的选择;目录结构及源码管理;嵌入式产品的开发效率。

开发流程的定义

什么是软件开发流程?

通过一系列步骤保证软件产品的顺利完成,软件产品在生命期内的管理方法学

软件开发流程的本质

开发流程与具体技术无关;开发流程是开发团队必须遵守的规则

瀑布模型(Waterfall Model)

通过自上而下的步骤进行软件开发;每个开发步骤都是不可逆的。

增量模型(Incremental Model)

将系统功能分解为互不重叠的子功能;每次全力实现一个子功能;子功能全部完成后系统开发结束

螺旋模型(Spiral Model)

采用一种迭代的方法来进行系统开发;项目分解成多个不同的版本完成;每个版本的开发过程都需要用户参与;根据前一个版本的反馈计划计划下一个版本。

敏捷模型(Agile Modeling)

一切从简;拥抱变化;高效工作;持续开发。

从目前的开发角度来讲,最容易改变的就是用户的需求。很有可能用户上一秒要这样的功能,下一秒就改变了。为什么会这样呢?因为现在是一个信息万变的时代。用户开发软件是为了解决自己的业务问题,而他们的业务可能会因为各种原因产生变化。那什么时候会发生改变,大家都说不清楚。所以呢,就想出了这么个模型。

这个模型的关键在于Iterations,Demo &Feedback,就是开发团队直接深入到用户内部去。和用户在一起开发这个软件。那这样的好处是,只要用户想要的东西发生了改变,那么开发团队立马就能直到。这样就能减少开发中的无用功,提升开发效率

每一种开发模型的提出,都是为了更好的开发出满足用户需求的产品。提高这一点的方式就是提高用户在软件开发过程中的参与度。最开始的瀑布模型,只需求在需求分析阶段需要用户参与。而最后的敏捷开发,是需要时时刻刻与用户一起。就是越靠近看客户,开发出的东西就越符合客户的需求。

平台与框架的选择

软件开发平台

开发平台是位于操作系统之上的软件层;开发平台提供更多模块化的功能,简化(加速)软件的开发。

软件开发框架

开发框架是位于开发平台之上的软件层;开发框架是为特定应用所设计的更抽象的软件模块。

平台与框架的示例

Spring/Java

Qt

目录结构及源码管理

目录设计VS源码管理

项目中每个模块的代码用一个文件夹进行管理:文件夹用incsrcmakefile构成。

项目中每个模块的对外函数声明统一放置同一目录。如:commom.hxxfunc.h

目录设计示例

.
└── Project
├── common
├── libs
│   ├── inc
│   │   ├── dlib.h
│   │   └── slib.h
│   └── lib
│   ├── dlib.so
│   └── slib.a
├── main
└── module

目录设计的意义

书架功能:反映项目中代码的层次感和模块化

意识引导:引导对于新增文件功能,命令以及位置的思考

增强维护性:加快开发人员对项目整体架构的理解

嵌入式产品的开发效率

常规嵌入式开发的方式

存在的问题

开发工程师必须人手一台设备(项目早期可能无法满足);每次代码改动必须到设备进行验证(效率低下);反复多次烧写可能导致设备损坏(不稳定的早期设备)。

常规嵌入式调试的方式

嵌入式开发的调试问题

需要基于额外硬件(JTAG)连接设备进行断点调试;常规日志只能写于文件中,无法实时查看;几乎无法进行现场调试(客户环境调试)。

嵌入式基础设施的建设

架构设计时,模块之间遵循强内聚,弱耦合原则:模块能够基于PC环境编译,并进行单元测试。

开发PC环境中的设备模拟器:产品代码能够在PC环境完整编译并运行于PC环境。

开发产品中可实时输出的日志系统:设备运行日志输出可以实时传输到PC环境。